package com.matrix.auth.service;

import com.matrix.api.user.dto.PasswordLoginDTO;
import com.matrix.api.user.dto.SmsLoginDTO;
import com.matrix.api.user.dto.SmsMfaLoginDTO;
import com.matrix.api.user.dto.UserRegisterDTO;
import com.matrix.api.user.vo.AccessTokenVO;
import com.matrix.api.user.vo.LoginSuccessVO;
import com.matrix.common.domain.Result;
import com.matrix.common.enums.SmsTypeEnum;

/**
 * @author 有点甜
 * @since 2025/7/25
 */
public interface AuthService {

    /**
     * 用户注册
     *
     * @param registerDTO 用户注册信息
     * @return 注册结果
     */
    Result<Void> register(UserRegisterDTO registerDTO);

    /**
     * 发送短信验证码
     *
     * @param phone 手机号
     * @param type  验证码类型
     */
    void sendVerificationCode(String phone, SmsTypeEnum type);

    /**
     * 密码登录
     *
     * @param loginDTO 登录信息
     * @return 登录结果
     */
    Result<?> passwordLogin(PasswordLoginDTO loginDTO);

    /**
     * 短信登录
     *
     * @param loginDTO 登录信息
     * @return 登录结果
     */
    Result<LoginSuccessVO> smsLogin(SmsLoginDTO loginDTO);

    /**
     * 短信MFA登录
     * @param mfaLoginDTO 登录信息
     * @return 登录结果
     */
    Result<LoginSuccessVO> smsMfaLogin(SmsMfaLoginDTO mfaLoginDTO);

    /**
     * 刷新Access token
     *
     * @param refreshToken 刷新token
     * @return 刷新结果
     */
    Result<AccessTokenVO> refreshAccessToken(String refreshToken);
}
